]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
shellDBus: Add UserExtensionsEnabled property
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 5 Mar 2020 17:15:37 +0000 (18:15 +0100)
committerFlorian Müllner <florian.muellner@gmail.com>
Fri, 6 Mar 2020 19:03:02 +0000 (19:03 +0000)
The 'disable-user-extensions' GSettings key is the last extensions-related
setting that isn't exposed over D-Bus, and therefore requires consumers
to access the GSettings directly.

Expose the setting as UserExtensionsEnabled readwrite property in the
org.gnome.Shell.Extensions interface to allow consumers to manage
extensions purely via D-Bus.

The 'disable-user-extensions' setting is the last extension-related
bit from the org.gnome.shell GSettings schema that is not exposed
via D-Bus.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1074

data/dbus-interfaces/org.gnome.Shell.Extensions.xml
js/ui/shellDBus.js

index 61c898e3d14fac66d82f6ccf5fb1edcb98c36637..eb7be8f1ac693e5a1061b06d0f44dc354a98d553 100644 (file)
     -->
     <property name="ShellVersion" type="s" access="read"/>
 
+    <!--
+        UserExtensionsEnabled:
+        Whether user extensions are enabled
+    -->
+    <property name="UserExtensionsEnabled" type="b" access="readwrite"/>
+
   </interface>
 </node>
index 05b7aca60dbb4e8dcfcffe8378f6de2b5ae90653..691019b42f5215f43bb1d405acfb520c5db26587 100644 (file)
@@ -255,6 +255,17 @@ var GnomeShellExtensions = class {
     constructor() {
         this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellExtensionsIface, this);
         this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell');
+
+        this._userExtensionsEnabled = this.UserExtensionsEnabled;
+        global.settings.connect('changed::disable-user-extensions', () => {
+            if (this._userExtensionsEnabled === this.UserExtensionsEnabled)
+                return;
+
+            this._userExtensionsEnabled = this.UserExtensionsEnabled;
+            this._dbusImpl.emit_property_changed('UserExtensionsEnabled',
+                new GLib.Variant('b', this._userExtensionsEnabled));
+        });
+
         Main.extensionManager.connect('extension-state-changed',
                                       this._extensionStateChanged.bind(this));
     }
@@ -325,6 +336,14 @@ var GnomeShellExtensions = class {
         return Config.PACKAGE_VERSION;
     }
 
+    get UserExtensionsEnabled() {
+        return !global.settings.get_boolean('disable-user-extensions');
+    }
+
+    set UserExtensionsEnabled(enable) {
+        global.settings.set_boolean('disable-user-extensions', !enable);
+    }
+
     _extensionStateChanged(_, newState) {
         let state = ExtensionUtils.serializeExtension(newState);
         this._dbusImpl.emit_signal('ExtensionStateChanged',